﻿/**
 * Скрипт управляющей аяксовой загрузкой данных в пейджинирующие секции
 */

/**
 * Основная функция которая инициализирует контейнер и подгатавливает его к работе
 * @param container - контейнер
 * @param url - url откуда загружать данные
 */
function AjaxItemsGridLoader(container,url,filter){
    // Запоминаем переменные и себя
    this.container = container;
    this.url = url;
    this.filter = filter;
    var self = this;

    // Ищем все используемые элементы
    this.overview = $(container).find(".overview");
    this.currentPage = parseInt($(container).find(".dataHolder").data('page'));
    this.totalItems = parseInt($(container).find(".dataHolder").data('totalitems'));
    this.totalPages = parseInt($(container).find(".dataHolder").data('totalpages'));
    this.itemsPerPage = parseInt($(container).find(".dataHolder").data("itemsperpage"));
    this.prevNext = $(container).find(".prevNext");
    this.prev = $(container).find(".prev");
    this.next = $(container).find(".next");
    this.currentPageContainer = $(container).find(".currentPage");
    this.totalPagesContainer = $(container).find(".totalPages");
    this.itemShows = $(container).find(".itemShows");
    this.startItem = $(container).find(".startItem");
    this.endItem = $(container).find(".endItem");
    this.totalContainer = $(container).find(".total");

    // Биндим события
    this.next.click(function(e){
        if (self.currentPage < self.totalPages - 1){
            self.currentPage = self.currentPage + 1;
            self.reloadData();
        }
    });
    this.prev.click(function(e){
        if (self.currentPage > 0){
            self.currentPage = self.currentPage - 1;
            self.reloadData();
        }
    });

    /**
     * Основная перезагружающая функция
     */
    this.reloadData = function(){
        this.overview.load(this.url, {filter: this.filter, page: this.currentPage, itemsPerPage: this.itemsPerPage, filterLetter: ''},function(text,status,request){
            self.updateControls();
        });
    };

    /**
     * Метод обновляющий статусные состояния компонентов и контроллов на основании текущих данных объекта
     */
    this.updateControls = function(){
        $(container).find(".dataHolder").data('page',this.currentPage);
        this.currentPageContainer.text(this.currentPage+1);
        this.startItem.text(this.currentPage*this.itemsPerPage+1);
        var endItem = this.currentPage*this.itemsPerPage+this.itemsPerPage;
        if (endItem > this.totalItems){
            endItem = this.totalItems;
        }
        this.endItem.text(endItem);
        if (this.currentPage == 0){
            this.prev.hide();
        } else {
            this.prev.show();
        }
        if (this.currentPage == this.totalPages-1){
            this.next.hide();
        } else {
            this.next.show();
        }
        if (this.totalPages == 1){
            this.prevNext.hide();
        } else {
            this.prevNext.show();
        }
    };
    this.updateControls();
}